package org.example.queue;

public class test3 {
    public void shiftDown(int[] array,int parent){
        // child先标记parent的左孩⼦，因为parent可能右左没有右孩子
        int child=parent*2+1;
        int size=array.length;
        while (child< size){
            // 如果右孩⼦存在，找到左右孩⼦中较⼩的孩⼦,⽤child进⾏标记
            if (child+1<size && array[child+1]<array[child]){
                child+=1;
            }
            // 如果双亲⽐其最⼩的孩⼦还⼩，说明该结构已经满⾜堆的特性了
            if (array[parent]<=array[child]){
                break;
            }else {
                // 将双亲与较⼩的孩⼦交换
                int t = array[parent];
                array[parent] = array[child];
                array[child] = t;
            }
            // parent中⼤的元素往下移动，可能会造成⼦树不满⾜堆的性质，因此需要继续向下调整
            parent=child;
            child=parent*2+1;
        }
    }
}
